/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-9-24 下午3:45 Created by dwzhang
 */
package com.jade.bss.weixin.api.bonus;

import javax.inject.Named;

import com.jade.bss.weixin.WeixinApp;
import com.jade.bss.weixin.WeixinException;
import com.jade.bss.weixin.api.bonus.protocol.QueryRedPackRequest;
import com.jade.bss.weixin.api.bonus.protocol.QueryRedPackResponse;
import com.jade.bss.weixin.api.bonus.protocol.SendRedPackRequest;
import com.jade.bss.weixin.api.bonus.protocol.SendRedPackResponse;
import com.jade.bss.weixin.api.protocol.xml.XmlApi;

/**
 * 红包的接口。目前只提供现金红包的接口。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-9-24 下午3:45
 */
@Named ("bss_weixinBonusApi")
public class BonusApi
        extends XmlApi
{
    public static final String URL_QUERY_REDPACK = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo";
    private static final String URL_SEND_REDPACK = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";

    /**
     *  用于企业向微信用户个人发现金红包， 目前支持向指定微信用户的openid发放指定金额红包。
     *
     * @param code 应用代码
     * @param request 发送红包请求
     * @return 发送红包响应
     * @throws WeixinException 无法调用微信接口。
     */
    public SendRedPackResponse sendRedPack(String code, SendRedPackRequest request)
            throws WeixinException
    {
        return sendRedPack(getApp(code), request);
    }

    /**
     *  用于企业向微信用户个人发现金红包， 目前支持向指定微信用户的openid发放指定金额红包。
     *
     * @param app 微信应用
     * @param request 发送红包请求
     * @return 发送红包响应
     * @throws WeixinException 无法调用微信接口。
     */
    public SendRedPackResponse sendRedPack(WeixinApp app, SendRedPackRequest request)
            throws WeixinException
    {
        setCommonParam(app, request);
        request.setWxAppId(app.getAppId());
        return submitRequest(URL_SEND_REDPACK, app, request, true, SendRedPackResponse.class);
    }

    /**
     * 用于商户对已发放的红包进行查询红包的具体信息，可支持普通红包和裂变包。
     *
     * @param code 应用代码
     * @param request 查询请求
     * @return 查询响应
     * @throws WeixinException 无法调用微信接口。
     */
    public QueryRedPackResponse queryRedPack(String code, QueryRedPackRequest request)
            throws WeixinException
    {
        return queryRedPack(getApp(code), request);
    }

    /**
     * 用于商户对已发放的红包进行查询红包的具体信息，可支持普通红包和裂变包。
     *
     * @param app 微信应用
     * @param request 查询请求
     * @return 查询响应
     * @throws WeixinException 无法调用微信接口。
     */
    public QueryRedPackResponse queryRedPack(WeixinApp app, QueryRedPackRequest request)
            throws WeixinException
    {
        setCommonParam(app, request);
        return submitRequest(URL_QUERY_REDPACK, app, request, true, QueryRedPackResponse.class);
    }
}
